import 'package:flutter/material.dart';

import 'package:get/get.dart';
import 'package:getx_learn/app/common/widgets/widgets.dart';

import '../controllers/snackbar_demo_controller.dart';

class SnackbarDemoView extends GetView<SnackbarDemoController> {
  SnackbarDemoView({Key? key}) : super(key: key);

  // 用来关闭 snackbar，适用 scaffoldMessengerKey.currentState.showSnackBar(SnackBar()) 这种方式
  // final GlobalKey<ScaffoldMessengerState> scaffoldMessengerKey = GlobalKey<ScaffoldMessengerState>();

  SnackbarController? _snackBarController = null;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: getAppBar(context: context, title: "Snackbar demo"),
      body: ListView(
        children: [
          ListTile(
            title: Text("简单使用"),
            subtitle: Text("最简单的使用"),
            onTap: () {
              _snackBarController = Get.snackbar("标题", "消息");
            },
          ),
          Divider(),
          ListTile(
            title: Text("属性罗列"),
            subtitle: Text("最简单的使用"),
            onTap: () {
              _snackBarController = Get.snackbar(
                // 弹出的标题文字
                "标题",

                // 弹出的消息文字
                "消息",

                // title和message的文字颜色
                colorText: Colors.purpleAccent,

                // Snackbar弹出的持续时间（默认3秒）
                duration: Duration(milliseconds: 5000),

                // 是否可在 initState 弹出，当false可以把snackbar 放在initState，默认true
                instantInit: true,

                // 弹出时的位置，有两个选项【TOP，BOTTOM】默认TOP
                snackPosition: SnackPosition.BOTTOM,

                // 弹出标题的组件，设置该属性会导致title属性失效
                titleText: Text("新标题"),

                // 弹出标题的组件，设置该属性会导致title属性失效
                messageText: Text("新消息"),

                // 弹出时图标，显示在title和message的左侧
                icon: Icon(Icons.ac_unit),

                // 弹出时图标是否闪烁，默认false
                shouldIconPulse: true,

                // 	Snackbar最大的宽度
                // maxWidth: 300,

                // Snackbar外边距，默认zero
                // margin: EdgeInsets.all(20),
                // margin: EdgeInsets.fromLTRB(20,0,20,80),

                // Snackbar内边距，默认EdgeInsets.all(16)
                //   padding: EdgeInsets.all(40),

                // 边框圆角大小，默认15
                //   borderRadius:80,

                // 边框的颜色，必须设置borderWidth，否则无效果
                borderColor: Colors.purpleAccent,

                // 边框的线条宽度
                borderWidth: 1,

                // Snackbar背景颜色，默认Colors.grey.withOpacity(0.2)
                // backgroundColor: Colors.blue.withAlpha(133),
                backgroundColor: Colors.blue.withOpacity(0.2),

                // 左侧指示器的颜色
                // leftBarIndicatorColor: Colors.green,

                // Snackbar阴影颜色
                // boxShadows: [
                //   BoxShadow(
                //     // 阴影颜色
                //     color: Colors.blue,
                //     // 阴影的 x，y 坐标的偏移
                //     offset: Offset(10, 20),
                //     // 阴影的扩散半径
                //     spreadRadius: 20,
                //     // 模糊半径
                //     blurRadius: 10,
                //   ),
                // ],

                // 背景的线性颜色
                backgroundGradient: LinearGradient(
                  colors: [
                    Colors.blue,
                    Colors.black38,
                  ],
                ),

                // 主要按钮，一般显示发送、确认按钮
                mainButton: TextButton(
                  onPressed: () {},
                  child: Text("发送"),
                ),

                // 点击Snackbar事件回调
                onTap: (getSnackBar) {
                  print(getSnackBar);
                  print("\n");
                  print("点击了\n");
                },

                // 是否开启Snackbar手势关闭，可配合dismissDirection使用
                isDismissible: true,

                // 是否显示进度条指示器，默认false
                showProgressIndicator: true,

                // 进度条指示器的动画控制器
                // progressIndicatorController:AnimationController(0.2, vsync: null)

                // 进度条指示器的背景颜色
                progressIndicatorBackgroundColor: Colors.blue,

                // 进度条指示器的背景颜色，Animation
                progressIndicatorValueColor:
                    AlwaysStoppedAnimation<Color>(Colors.red),

                // Snackbar关闭的方向
                dismissDirection: DismissDirection.horizontal,

                // Snackbar是否会附加到屏幕边缘
                snackStyle: SnackStyle.FLOATING,

                // Snackbar弹出的动画，默认Curves.easeOutCirc
                forwardAnimationCurve: Curves.bounceInOut,

                // Snackbar消失的动画，默认Curves.easeOutCirc
                reverseAnimationCurve: Curves.easeInOut,

                // Snackbar弹出和消失的动画时长，默认1秒
                animationDuration: Duration(milliseconds: 2000),

                // Snackbar背景的模糊度
                barBlur: 100,

                // 	弹出时的毛玻璃效果值，默认0
                overlayBlur: 1,

                // Snackbar弹出或消失时的事件回调（即将打开、已打开、即将关闭、已关闭）
                snackbarStatus: (status) {
                  print(status);
                  if (status == SnackbarStatus.CLOSED) {
                    _snackBarController = null;
                  }
                },

                // 弹出时的毛玻璃的背景颜色
                overlayColor: Colors.purple.withOpacity(0.2),

                // 用户输入表单
                userInputForm: Form(
                  child: Row(
                    children: [
                      Expanded(
                        child: TextField(),
                      ),
                    ],
                  ),
                ),
              );
            },
          ),
          Divider(),
          ListTile(
            title: Text("关闭 Snackbar"),
            subtitle: Text(""),
            onTap: () {
              // 关闭SnackBar
              //scaffoldMessengerKey.currentState?.hideCurrentSnackBar();
              _snackBarController?.close(withAnimations: true);
              _snackBarController = null;
            },
          )
        ],
      ),
    );
  }
}
